<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<%@ page isELIgnored ="false" %>  
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Test des expressions EL</title>
</head>
<body>
	<p>
		<!-- Logiques sur des booléens -->
		${ true && true } <br />
		<!-- Affiche true -->
		${ true && false } <br />
		<!-- Affiche false -->
		${ !true || false } <br />
		<!-- Affiche false -->

		<!-- Calculs arithmétiques -->
		${ 10 / 4 } <br />
		<!-- Affiche 2.5 -->
		${ 10 mod 4 } <br />
		<!-- Affiche le reste de la division entière, soit 2 -->
		${ 10 % 4 } <br />
		<!-- Affiche le reste de la division entière, soit 2 -->
		${ 6 * 7 } <br />
		<!-- Affiche 42 -->
		${ 63 - 8 } <br />
		<!-- Affiche 55 -->
		${ 12 / -8 } <br />
		<!-- Affiche -1.5 -->
		${ 7 / 0 } <br />
		<!-- Affiche Infinity -->

		<!-- Compare les caractères 'a' et 'b'. Le caractère 'a' étant bien situé avant le caractère 'b' dans l'alphabet ASCII, cette EL affiche true. -->
		${ 'a' < 'b' } <br />

		<!-- Compare les chaînes 'hip' et 'hit'. Puisque 'p' < 't', cette EL affiche false. -->
		${ 'hip' gt 'hit' } <br />

		<!-- Compare les caractères 'a' et 'b', puis les chaînes 'hip' et 'hit'. Puisque le premier test renvoie true et le second false, le résultat est false. -->
		${ 'a' < 'b' && 'hip' gt 'hit' } <br />

		<!-- Compare le résultat d'un calcul à une valeur fixe. Ici, 6 x 7 vaut 42 et non pas 48, le résultat est false. -->
		${ 6 * 7 == 48 } <br />

	<p></p>




		<!-- Vérifications si vide ou null -->
		${ empty 'test' }<br />
		<!-- La chaîne testée n'est pas vide, le résultat est false -->
		${ empty '' }<br />
		<!-- La chaîne testée est vide, le résultat est true -->
		${ !empty '' }<br />
		<!-- La chaîne testée est vide, le résultat est false -->
		<!-- Conditions ternaires -->
		${ true ? 'vrai' : 'faux' }<br />
		<!-- Le booléen testé vaut true, vrai est affiché -->
		${ 'a' > 'b' ? 'oui'  : 'non' }<br />
		<!-- Le résultat de la comparaison vaut false, non est affiché -->
		${ empty 'test' ? 'vide' : 'non  vide'  }<br />
		<!-- La chaîne testée n'est pas vide, non vide est affiché -->

		<!-- La ligne suivante : -->
	<p>12 est inférieur à 8 : ${ 12 lt 8 }.</p>

	<!-- Sera rendue ainsi après interprétation de l'expression, 12 n'étant pas inférieur à 8 : -->
	<p>12 est inférieur à 8 : false.</p>
	</p>
	<p>
		<!-- Initialisation d'un bean de type Coyote avec une action standard, pour l'exemple : -->
		<jsp:useBean id="coyote" class="com.sdzee.beans.Coyote" />
		<!-- Initialisation de sa propriété 'prénom' : -->
		<jsp:setProperty name="coyote" property="prenom" value="Wile E." />
		<!-- Et affichage de sa valeur : -->
		<jsp:getProperty name="coyote" property="prenom" />
		${ coyote.prenom }
	</p>
	<!-- Comparaison d'égalité entre la propriété prenom et la chaîne "Jean-Paul" -->
	${ coyote.prenom == "Jean-Paul" }

	<!-- Vérification si la propriété prenom est vide ou nulle -->
	${ empty coyote.prenom }

	<!-- Condition ternaire qui affiche la propriété prénom si elle n'est ni vide ni nulle, et la chaîne "Veuillez préciser un prénom" sinon -->
	${ !empty coyote.prenom ? coyote.prenom : "Veuillez préciser un prénom" }

	<!-- La scriptlet suivante affiche "null" si la propriété "prenom" n'a pas été initialisée, 
et provoque une erreur à la compilation si l'objet "coyote" n'a pas été initialisé : -->
	<%=coyote.getPrenom()%>

	<!-- L'action suivante affiche "null" si la propriété "prenom" n'a pas été initialisée, 
et provoque une erreur à l'exécution si l'objet "coyote" n'a pas été initialisé : -->
	<jsp:getProperty name="coyote" property="prenom" />

	<!-- L'expression EL suivante n'affiche rien si la propriété "prenom" n'a pas été initialisée,
et n'affiche rien si l'objet "coyote" n'a pas été initialisé : -->
	${ coyote.prenom }
	<p>
		<%
			/* Création d'une liste de légumes et insertion de quatre éléments */
			java.util.List<String> legumes = new java.util.ArrayList<String>();
			legumes.add("poireau");
			legumes.add("haricot");
			legumes.add("carotte");
			legumes.add("pomme de terre");
			request.setAttribute("legumes", legumes);
		%>

		<!-- Les quatre syntaxes suivantes retournent le deuxième élément de la liste de légumes  -->
		${ legumes.get(0) }<br /> ${ legumes[1] }<br /> ${ legumes['2'] }<br />
		${ legumes["3"] }<br />
	</p>
	<p>
		<%
			/* Création d'un tableau */
			String[] animaux = { "chien", "chat", "souris", "cheval" };
			request.setAttribute("animaux", animaux);
		%>

		<!-- Les trois syntaxes suivantes retournent le troisième élément du tableau  -->
		${ animaux[0] }<br /> ${ animaux['1'] }<br /> ${ animaux["2"] }<br />
	</p>
	
	<!-- l'accès aux éléments d'une Map  -->
	<p>
        <% 
        /* Création d'une Map */
        java.util.Map<String,Integer> desserts = new java.util.HashMap<String, Integer>();
        desserts.put("cookies", 8);
        desserts.put("glaces", 3);
        desserts.put("muffins", 6);
        desserts.put("tartes aux pommes", 2);
        
        request.setAttribute("desserts" , desserts);
        %>
        
        <!-- Les quatre syntaxes suivantes retournent la valeur associée à la clé "cookies" de la Map de desserts  -->
        ${ desserts.cookies }<br />
        ${ desserts.get("cookies") }<br />
        ${ desserts['cookies'] }<br />
        ${ desserts["cookies"] }<br />

        <% 
        /* Création d'une chaîne nommée "element" et contenant le mot "cookies" */
        String element = "cookies"; 
        request.setAttribute("element",element);
        %>
        <!-- Il est également possible d'utiliser un objet au lieu d'initialiser la clé souhaitée directement dans l'expression -->
        ${ desserts[element] }<br />
    </p>
</body>
</html>